dofile "lib/radical.lua"

function tile(s) 
  return const.path.gfx.."game/ka/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."3-inter/shadow/"..s..".xml";
end

main = engine.main {
   start        = chain_ {
                     episode_("3-shadow")
                    ,musplayer_("shadow_player")
                    ,walk_("nik_dlg")--start1
                  }
  ,finish       = gamefile_("4-mad/mad.lua")
}

shadow = engine.state {
   _phone       = false --Kate listened to phone message
  ,_window      = false --Kate opened window but wind closes it
  ,_books       = false --Kate used old books to keep window open
  ,_car         = false --Kate saw a strange car in window
  ,_checkcall   = false --Kate needs to check whether phone is ringing
  ,_outside     = false --Kate went outside
  ,_sign        = false --Kate examined car sign
  ,_talk        = false --Kate talked with a driver
  ,_chase       = false --A driver is chasing Kate
  ,_yard        = false --Kate explored yard
  ,_chase2      = false --Kate saw a man who is chasing her second time
  ,_kick        = false --Kate kicked a fence
  ,_bench       = false --Kate destroyed a bench
  ,_can         = false --Can is not so heavy anymore
  ,_home        = false --Kate needs to go home
  ,_checkcall2  = false --Kate needs to check call the second time
}

shadow_player = musplayer.player {
   mus("terminal"):inside("start1")
  ,sfx("phonenoise"):inside("phonenoise2")
  ,sfx("violin"):inside("hall_window_car1")
  ,sfx("dooropen2"):inside("outside_trans1"):always()
  ,sfx("footsteps"):inside("outside_trans2"):always()
  ,sfx("footsteps"):inside("flat_trans1"):always()
  ,sfx("dooropen2"):inside("flat_trans2"):always()
  ,sfx("phone"):inside("suddencall")
  ,mus("meeting"):inside("entrance_ambient"):loop()
  ,sfx("powerwindow"):inside("street1_car_open2"):always()
  ,mus("hurryup"):inside("street2_look2"):loop()
  ,mute():inside("yard1_enter"):fade(3000,3000):always()
  ,mus("satiate_strings"):inside("street3"):loop():when("not is_music()"):always()
  ,mus("satiate_strings"):inside("yard2"):loop():always()
  ,sfx("bam2"):inside("yardexit_chase1")
  ,sfx("violin"):inside("yardexit_chase3")
  ,mute():inside("yardfree1"):fade(3000,3000)
  ,sfx("softnote"):inside("yardfree2")
  ,mute():inside("yardfree1"):fade(3000,3000)
  ,sfx("phone2"):inside("kitchen2"):when("shadow._checkcall2"):loop()
  ,mute():inside("nik_dlg")
}


------------------------------------------------------------------------------------------
-- Apartment
------------------------------------------------------------------------------------------

start1 = slideup {
   fps          = 20
  ,x            = 0
  ,y            = 360
  ,step         = 2
  ,tile         = tile "bed"
  ,next         = "start2"
}

start2 = scene {
   tile         = tile "bed"
  ,dsc          = [[Пока Катя ехала домой на такси, ей постоянно казалось, что за ними неустанно следует большой черный седан.
                    Иногда седан скрывался за черными поворотами, точно растворяясь в дожде, но уже спустя несколько секунд
                    пасмурный сумрак разрезал слепящий свет его фар. Однако, когда такси привезло ее к дому, никакой машины поблизости
                    не оказалось, точно этот странный преследователь лишь привиделся ей.^
                    Катя страшно устала после всех событий этого дня. Она думала, что тут же провалится в сон, стоит ей лишь прилечь
                    на постель. Однако сон не шел. Что-то {walk(start3)|не давало ей покоя}.
                  ]]
}

start3 = pause {
   time         = 1500
  ,next         = "kateroom"
}

hall = scene {
   tile         = tile "hall"
  ,bounds       = { 200, nil, 640 }
  ,obj          = { "hall_window", "hall_window2", "hall_hungry" }
  ,nav          = {
                     right = vw("На кухню", "kitchen")
                    ,left = vw("В комнату Кати", "kateroom_hub")
                    ,down = vw("В прихожую", "coridor_hub")
                  }
}

hall_hungry = staticitem {
   dsc          = "^^Катя вдруг поняла, что ей страшно хочется есть."
  ,cnd          = if_("shadow._home")
}

hall_window = staticitem {
   dsc          = [[{Окно} в гостиной незашторено, и, хотя по стеклу еще стекают дождевые капли, видно, что дождь наконец закончился, и 
                    на улице даже стало светлее, чем несколько часов назад -- точно ближе к ночи в городе начинается рассвет.]]
  ,act          = "Катя выглянула в окно, и в ту же секунду почувствовала, как холодок {walk(hall_window_car1)|пробежал по ее коже}."
  ,disable      = if_("hall_window_car1._seen")
  ,cnd          = not_("shadow._home")
}

hall_window2 = staticitem {
   dsc          = "{Окно} в гостиной незашторено, и на стекле можно заметить следы от дождевых капель."
  ,act          = "Машины внизу больше не видно. Наверное, ее преследователь действительно уехал."
  ,cnd          = if_("shadow._home")
  ,showonce     = true
}

hall_window_car1 = cutscene {
   bounds       = { 260, 240, 480 }
  ,enter        = set_("shadow._car")
  ,dsc          = [[Это он! Тот самый черный седан! Огромная дорогая машина, какие очень редко появляются в этом захолустье. Неужели за
                    ней и правда кто-то следит? Может, эта машина просто приехала за кем-то? Может, это просто совпадение? Но ведь до
                    комендантского часа осталось совсем немного, не лучшее время, чтобы разъезжать по городу на дорогом авто. Если только...]]
  ,next         = "hall_window_car2"
}

hall_window_car2 = cutscene {
   bounds       = { 260, 260, 480 }
  ,dsc          = [[Вряд ли она сможет заснуть, когда под ее окнами стоит эта машина. Может, просто выйти к ним? Может, сделать вид, что она
                    в спешке уходит куда-то? Наверняка это просто совпадение.]]
  ,next         = "hall"
}

kitchen = scene {
   tile         = tile "table"
  ,enter        = choose_ {
                    ["shadow._home"] = walk_("kitchen2")
                  }
  ,dsc          = "Надо бы приготовить себе что-нибудь на ужин, но это еще успеется. Кате пока не хочется есть."
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("В гостиную", "hall")
                  }
}

kitchen2 = scene {
   tile         = tile "table"
  ,obj          = { "kitchen_things1", "kitchen_things2" }
  ,nav          = {
                    down = vw("В гостиную", "hall")
                  }
}

kitchen_things1 = staticitem {
   dsc          = "На кухонном столе лежит {коробка} с замороженными котлетами, которые Катя купила днем."
  ,act          = choose_ {
                     ["default"] = chain_ { set_("shadow._checkcall2"), "Кажется, в комнате Кати звонит телефон." }
                    ,["shadow._checkcall2"] = "Лучше бы сначала проверить, кто ей звонит."
                  }
}

kitchen_things2 = staticitem {
   dsc          = "Их нужно просто разогреть в {микроволновке}."
  ,act          = choose_ {
                     ["default"] = chain_ { set_("shadow._checkcall2"), "Кажется, в комнате Кати звонит телефон." }
                    ,["shadow._checkcall2"] = "Лучше бы сначала проверить, кто ей звонит."
                  }
}

coridor_hub = engine.hub {
  enter         = choose_ {
                     ["default"] = walk_("coridor")
                    ,["shadow._car and not suddencall._seen"] = walk_("suddencall")
                  }
}

suddencall = cutscene {
   bounds       = { 340, 260, 480 }
  ,enter        = set_("shadow._checkcall")
  ,dsc          = "Кажется, в комнате Кати звонит телефон."
  ,next         = "hall"
}

coridor = scene {
   tile         = { cm_tile "coridor", 500, 20 }
  ,bounds       = { nil, 50, 500 }
  ,obj          = { "dadbox" }
  ,nav          = {
                     up = vw("Выйти из квартиры", "outside_trans1"):cnd(
                              "shadow._car and not inventory.has(books) and not shadow._home",
                              choose_ {
                                 ["shadow._home"] = "Лучше не разгулировать по улице в комендантский час."
                                ,["not shadow._car and not inventory.has(books)"] = "Уже довольно поздно. Нет смысла куда-то выходить."
                                ,["shadow._car and inventory.has(books)"] = "Кате совсем не хочется таскать с собой эту огромную кипу книгу."
                                ,["not shadow._car and inventory.has(books)"] = "Уже довольно поздно. Нет смысла куда-то выходить. К тому же с этой огромной кипой книг в руках."
                              }
                            )
                    ,left = vw("В туалет", "toilet")
                    ,down = vw("В гостиную", "hall")
                  }
}

dadbox = staticitem {
   dsc          = "На столике у стены по-прежнему лежит {ящик} с инструментами отца."
  ,act          = [[Все эти вещи напоминают Кате об отце... Воспоминания... Теперь все в этой квартире причиняет ей
                    боль, однако убрать все это, спрятать от глаз, она не решается.]]
  ,showonce     = true
}

toilet = scene {
   tile         = cm_tile "toilet"
  ,bounds       = { 50, nil, 750 }
  ,obj          = { "toilet_wall" }
  ,nav          = {
                    down = vw("Выйти", "coridor")
                  }
}

toilet_wall = staticitem {
   dsc          = "{У грязной кафельной стены} в туалете лежит большая связка газет, которые зачем-то хранил отец."
  ,act          = "Катя давно собиралась ее почистить, даже купила специальное средство, но теперь уже не до этого."
}

kateroom_hub = engine.hub {
  enter         = choose_ {
                     ["default"] = walk_("kateroom")
                    ,["shadow._checkcall"] = walk_("kateroom_nocall")
                  }
}

kateroom_nocall = scene {
   tile         = tile "room"
  ,bounds       = { 120, 40, 700 }
  ,enter        = unset_("shadow._checkcall")
  ,dsc          = "Нет, телефон не звонит. Может быть, Кате просто послышалось?"
  ,alwaydsc     = true
  ,nav          = {
                    down = vw("Выйти из комнаты", "hall")
                  }
}

kateroom = scene {
   tile         = tile "room"
  ,bounds       = { 120, 40, 700 }
  ,obj          = { "kateroom_window", "books", "phone", "phonenik" }
  ,nav          = {
                    down = vw("Выйти из комнаты", "hall")
                  }
}

books = item {
   nam          = "Книги"
  ,dsc          = choose_ {
                     ["default"] = "Под окном, у батареи, лежит кипа старых заскорузлых {книг}."
                    ,["here()==toilet"] = "И старые {книги}, которые оставила здесь Катя."
                  }
  ,ico          = ico "books"
  ,img          = ico "books-use"
  ,tak          = "Катя подняла книги. Довольно тяжело таскать их в руках."
  ,use          = chooseuse_ {
                     ["default"] = "Вряд ли стоит делать это с книгами."
                    ,["toilet_wall"] = chain_ { drop_("books"), put_("books"), "Катя устала таскать с собой тяжелые старые книги и положила их на пол рядом с газетами." }
                    ,["kateroom_window"] = 
                        choose_ {
                           ["default"] = "Окно закрыто. Чем тут помогут книги?"
                          ,["shadow._window"] = chain_ { drop_("books"), unlock_("3-window"), set_("shadow._books"), "Катя прижала створку окна книгами." }
                        }
                  }
}

kateroom_window = staticitem {
   dsc          = choose_ {
                     ["default"] = 
                        [[В комнате стоит спертый воздух -- Катя уже несколько дней не открывала окно. Она даже не представляет, как будет спать в
                          такой духоте. Дождь на улице уже закончился, надо бы открыть {окно}.]]
                    ,["shadow._window and not shadow._books"] = 
                        [[{Окно} в комнате приоткрыто, однако холодный порывистый ветер, неожиданно усилившийся ближе к ночи, хлопает ставнями так,
                          что позвякивает стекло.]]
                    ,["shadow._books"] = 
                        [[Окно приоткрыто и прижато с двух сторон книгами -- как в тот самый день. В комнате чувствуется легкий запах дождя, а ветер
                          слегка покачивает лампу на потолке. Но все равно -- лучше оставить окно ненадолго открытым, в противном случае ночью ей нечем
                          будет дышать.]]
                  }
  ,act          = choose_ {
                     ["default"] = chain_ { set_("shadow._window"), stop_music, sound_("doorshut2"), walkblack2_("kateroom", "Катя приоткрыла окно.") }
                    ,["shadow._window"] = "Окно уже открыто."
                  }
}

phonenik = staticitem {
   dsc          = "^^{Телефон} действительно звонит. Катя какое-то время колеблется, точно боится снять трубку."
  ,act          = walk_("nik_dlg")
  ,cnd          = if_("shadow._checkcall2")
}

phone = staticitem {
   dsc          = "На {телефоне} горит красный огонек -- есть непрочитанное сообщение."
  ,act          = walk_("phone_dlg")
  ,cnd          = if_("not shadow._outside and not phone_dlg._seen")
}

phone_dlg = dialog {
   tile         = { tile "phone", 590, 180 }
  ,bounds       = { 220, 190, 400 }
  ,dlg          = dxml "phone"
  ,dsc          = [[Наверняка ей звонили уже множество раз, ведь она столько времени не была в институте. Однако автоответчик умеет сохранять
                    лишь последнее сообщение -- отец так и не смог его полностью починить.]]
}

nik_dlg = dialog {
   bounds       = { 260, 220, 480 }
  ,dlg          = dxml "nik"
}

phonenoise1 = pause {
   time         = 1500
  ,next         = "phonenoise2"
}

phonenoise2 = pause {
   time         = 3500 
  ,next         = "phonenoise3"
}

phonenoise3 = cutscene {
   bounds       = { 260, 240, 480 }
  ,dsc          = [[Странно. Просто какие-то помехи. Как будто кто-то звонил ей, но не решился оставить сообщение. А может, просто автоответчик
                    совсем перестал работать?]]
  ,next         = "kateroom"
}


------------------------------------------------------------------------------------------
-- Outside
------------------------------------------------------------------------------------------

outside_trans1 = pause {
   time         = 1000
  ,next         = "outside_trans2"
}

outside_trans2 = slidedown {
   fps          = 1
  ,x            = 70
  ,y            = 360
  ,step         = 40
  ,tile         = tile "oldstairs_down"
  ,next         = choose_ {
                     ["default"] = walk_("entrance_ambient")
                    ,["entrance._seen"] = walk_("entrance")
                  }
}

flat_trans1 = slidedown {
   fps          = 1
  ,x            = 70
  ,y            = 360
  ,step         = 40
  ,tile         = tile "oldstairs_up"
  ,next         = "flat_trans2"
}

flat_trans2 = pause {
   time         = 1000
  ,next         = "coridor"
}

entrance_ambient  = pause {
   time         = 2000
  ,enter        = set_("shadow._outside")
  ,next         = "entrance"
}

entrance = scene {
   tile         = tile "building"
  ,bounds       = { 280, nil, 550 }
  ,dsc          = [[Воздух на улице такой пронзительно свежий, что у Кати даже начинает кружиться голова. И солнце еще светит 
                    довольно ярко. Однако ветер порывистый и холодный. Катя быстро становится холодно, и она немного жалеет, 
                    что не надела старый отцовский дождевик.^^]]
  ,obj          = { "entrance_car", "entrance_carsign" }
  ,nav          = {
                     left = vw("Вернуться в дом", "flat_trans1")
                    ,right = vw("На другую сторону улицы", "street1")
                  }
}

entrance_car = staticitem {
   dsc          = "На противоположной стороне дома стоит черная {машина}."
  ,act          = [[Все стекла у машины затонированы, и Катя даже не видит, есть ли кто внутри. Двигатель у машины не работает, фары 
                    не горят, но она почему-то уверена, что кто-то неустанно следит за ней через затемненное стекло.]]
  ,showonce     = true
}

entrance_carsign = staticitem {
   dsc          = "Катя невольно приглядывает к ее {номеру}."
  ,act          = "Нет, отсюда не получается разглядеть."
  ,cnd          = not_("entrance_carsign")
}

street1 = scene {
   tile         = cm_tile "streetwall2"
  ,bounds       = { 125, nil, 735 }
  ,obj          = { "street1_car", "street1_carsign" }
  ,nav          = {
                     left = vw("К дому Кати", "entrance")
                    ,up = vw("Вверх по улице", "street2"):cnd(
                        "shadow._sign and shadow._talk",
                        choose_ {
                           ["not shadow._sign"] = "Надо бы для начала осмотреть машину."
                          ,["not shadow._talk"] = "Может, лучше проверить, правда ли кто-то сидит в этой машине?"
                        })
                  }
}

street1_car = staticitem {
   dsc          = choose_ {
                     ["default"] = 
                        [[У большой черной машины, припаркованной рядом с бордюром, действительно тонированы все стекла -- даже через лобовое стекло
                          не получается ничего разглядеть. К тому же водитель как будто специально выбрал место для парковки под разбитым фонарем -- 
                          так, чтобы его автомобиль оставался в тени, даже когда включат ночное освещение. Катя почему-то уверена, что машину не просто 
                          бросили здесь на ночную стоянку. Внутри кто-то по-прежнему есть. Катя думает, что могла бы попробовать {заговорить} с водителем, 
                          посмотреть на его реакцию.]]
                    ,["street1_car._seen"] = "Большая черная {машина} все еще стоит здесь, в сумеречной тени под разбитым фонарем."
                  }
  ,act          = walk_("street1_car_open1")
}

street1_carsign = staticitem {
   dsc          = "Катя осторожно обходит машину, чтобы рассмотреть ее номерной {знак}."
  ,act          = chain_ { set_("shadow._sign"), "АРТ-565. Эти цифры ничего не говорят Кате. К тому же, судя по плашке, это обычный гражданский номер." }
  ,cnd          = not_("street1_carsign._seen")
}

street1_car_open1 = cutscene {
   bounds       = { 260, 240, 480 }
  ,dsc          = "Катя слегка постучала в боковое окно машины, и через несколько секунд послышалось жужжание электропривода."
  ,next         = "street1_car_open2"
}

street1_car_open2 = pause {
   time         = 2000
  ,next         = "car_dlg"
}

car_dlg = dialog {
   tile         = { cm_tile "carwindow", 0, 20 }
  ,enter        = set_("shadow._talk")
  ,bounds       = { nil, 280, 780 }
  ,dsc          = [[На Катю с каким-то пренебрежением смотрит молодой мужчина в черных очках.]]
  ,dlg          = dxml "car"
  ,talkend      = "street1"
}

street2 = scene {
   tile         = cm_tile "streetwall1"
  ,bounds       = { 80, nil, 720 }
  ,dsc          = choose_ {
                     ["default"] = 
                        [[Ветер немного успокоился, и Катю уже не трясло так от холода. На улице было необычно светло для такого позднего
                          часа -- или это только казалось после дневного ненастья? Все эти страхи по поводу преследования вдруг показались
                          Кате такими надуманными. Кому нужно преследовать ее? Зачем? Даже если рабочие видели, как она выходила из того
                          ангара...^
                          Катя неторопливо шла по улице. Вечерняя прогулка перед началом комендантского часа. Вдруг позади нее послышался
                          какой-то резкий {walk(street2_look1)|звук}.]]
                    ,["shadow._chase"] = 
                        [[Нельзя терять ни секунды. Просто так вернуться домой она уже не сможет -- ведь он где-то там, позади. Кто знает,
                          что он замыслил? Лучше бы она не выходила из дома...]]
                  }
  ,alwaysdsc    = true
  ,nav          = {
                    up = vw("Вверх по улице", "street3")
                  }
}

street2_look1 = scene {
   bounds       = { 260, 240, 480 }
  ,nohud        = true
  ,dsc          = [[Хлопнула дверца машины? Но зачем ее преследователю, если он действительно ее преследует, так громко хлопать дверью?
                    Однако Катя невольно {walk(street2_look2)|обернулась}.]]
}

street2_look2 = scene {
   bounds       = { 260, 200, 480 }
  ,nohud        = true
  ,enter        = set_("shadow._chase")
  ,dsc          = [[Это он! Тот самый водитель! Он поспешно юркнул в ближайший подъезд, но Катя все равно успела его заметить. Она некоторое
                    время стояла, не понимая, что ей делать. Значит, он действительно следовал за ней все это время. Быть может, он нарочно
                    так открыто припарковался напротив ее дома. Он только и ждал, когда она выйдет. Чего же он хочет? Куда ей теперь {walk(street2)|идти}?^^
                    До начала комендантского часа оставалось чуть больше получаса.]]
}

street3 = scene {
   tile         = cm_tile "streetwall3"
  ,bounds       = { 100, nil, 700 }
  ,dsc          = "У Кати такое чувство, словно кто-то дышит ей в спину. Она оборачивается -- но никого позади нет."
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("Вверх по улице", "street4")
                    ,right = vw("Свернуть во двор", choose_ { ["default"] = walk_("yard1_enter"), ["yard1._seen"] = walk_("yard1") })
                    ,down = vw("К дому Кати"):noway("Нет! Лучше не идти назад! Катя чувствует, что этот незнакомец по-прежнему преследует ее.")
                  }
}

street4 = scene {
   tile         = { cm_tile "clouds4", 0, 20 }
  ,bounds       = { 176, 333, 700 }
  ,dsc          = [[Комендантский час начнется совсем скоро, Катя не успеет вернуться домой. Лучше попробовать обмануть преследователя, обойти его дворами.
                    Если, конечно, еще не поздно.]]
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("Вернуться назад", "street3")
                  }
}

yardexit_hub = engine.hub {
  enter         = choose_ {
                     ["default"] = walk_("street3")
                    ,["shadow._yard"] = walk_("yardexit_chase1")
                  }
}

yardexit_chase1 = pause {
   time         = 500
  ,fading       = 0
  ,enter        = chain_ { stop_music, set_("shadow._chase2") }
  ,ondrawbg     = function(s,p)
                    drawing.draw_text(p, "ОН ТАМ!", 300, 240, "white", const.fontb, 76);
                    return p;
                  end
  ,next         = "yardexit_chase2"
}

yardexit_chase2 = pause {
   time         = 1000
  ,fading       = 0
  ,next         = "yardexit_chase3"
}

yardexit_chase3 = cutscene {
   bounds       = { 260, 240, 480 }
  ,dsc          = [[Катя заметила, как на улице мелькнула знакомая черная фигура. Это он! Тот самый водитель!
                    Он поджидает ее у выхода со двора! Туда ей пути теперь нет.]]
  ,next         = "yard1"
}

yard1_enter = pause {
   time         = 500
  ,next         = "yard1"
}

yard1 = scene {
   tile         = cm_tile "oldyard1"
  ,bounds       = { 150, nil, 720 }
  ,dsc          = choose_ {
                     ["default"] = 
                        [[Катя раньше часто ходила через этот двор -- так можно срезать почти два квартала, если нужно
                          попасть на соседнюю улицу. Дома здесь совсем старые, хотя расселять их даже не собираются.]]
                    ,["yard1._seen"] = "Дома здесь совсем старые, хотя расселять их даже не собираются."
                  }
  ,alwaysdsc    = true
  ,obj          = { "heavycan" }
  ,nav          = {
                     up = vw("В конец двора", "yard2")
                    ,down = vw("Выйти со двора", "yardexit_hub"):cnd("not shadow._chase2", "Нет! Лучше не выходить из этого двора. Он ждет ее там!")
                  }
}

yard2 = scene {
   tile         = cm_tile "oldyard3"
  ,enter        = set_("shadow._yard")
  ,bounds       = { 140, nil, 720 }
  ,dsc          = [[Нет! Катя совсем забыла -- этот двор теперь не проходной.]]
  ,obj          = { "yard2_fence", "heavycan" }
  ,nav          = {
                     right = vw("Обойти двор", "yard3")
                    ,down = vw("К выходу со двора", "yard1")
                  }
}

yard2_fence = staticitem {
   dsc          = choose_ {
                     ["default"] = "Раньше через него можно было выйти на соседнюю улицу, а теперь проход перегораживает высокий решетчатый {забор}."
                    ,["yard2._seen"] = "Выход на улицу перегораживает высокий решетчатый {забор}."
                  }
  ,act          = choose_ {
                     ["default"] = 
                        chain_ {
                          set_("shadow._kick"),
                          [[Забор слишком высокий, чтобы через него можно было перелезть; к тому же, Катя не видит поблизости ничего такого,
                            что помогло бы ей забраться наверх. Однако, если присмотреться, то можно заметить, что железная решетка внизу
                            сильно проржавела и немного отдходит. Быть может, получиться ее {walk(yard2_fence_scene)|отогнуть} -- и тогда Катя 
                            сможет пролезть.]]
                        }
                    ,["yard2_fence_scene._seen"] = walk_("yard2_fence_scene")
                  }
}

yard2_fence_scene = engine.hub {
  enter         = chain_ { 
                    sound_("gateclosed"), 
                    walkblack_("yard2", "Катя несколько раз ударила по решетке ногой, но ничего не вышло. Решетка все еще крепко держится.")
                  }
}

yard3 = scene {
   tile         = { cm_tile "oldyard2", 0, 20 }
  ,bounds       = { nil, 200 }
  ,dsc          = [[Здесь есть вход в подъезд, черный и загаженный, почти такой же, как в доме Кати.]]
  ,alwaysdsc    = true
  ,obj          = { "bench", "heavycan" }
  ,nav          = {
                     up = vw("В подъезд", "yard4")
                    ,right = vw("К забору", "yard2")
                    ,down = vw("К выходу со двора", "yard1")
                  }
}

bench = staticitem {
   dsc          = "Рядом с подъездом стоит самодельная скамейка -- провисшая доска на двух мятых жестяных {банках}."
  ,act          = chain_ { 
                    sound_("wood"), 
                    set_("shadow._bench"),
                    take_("paintcan"),
                    [[Катя с трудом вытащила одну из банок, и скамейка обрушилась. Банка оказалось очень тяжелой, видимо, 
                      в ней еще оставалась краска, которая теперь засохла так, что даже открыть банку не получается. Катя 
                      с трудом может нести банку в руках.]]
                  }
  ,cnd          = not_("shadow._bench")
}

heavycan = staticitem {
   dsc          = "^^Банка с краской такая тяжелая, что Катя с трудом может ее нести. Кажется, она вот-вот {выскользнет} у нее из рук."
  ,act          = chain_ { 
                    drop_("paintcan"), 
                    put_("paintcan"), 
                    "Пальцы у Кати совсем онемели. Она почувствовала, что вот-вот выронит банку и поставила ее на тротуар." 
                  }
  ,cnd          = if_("inventory.has(paintcan) and not shadow._can")
}

paintcan = item {
   nam          = "Банка с краской"
  ,dsc          = "^^Здесь стоит {банка} с краской, которую оставила Катя."
  ,takcnd       = not_("inventory.has(pipe) and not shadow._can")
  ,tak          = choose_ {
                     ["default"] = "Катя с трудом подняла банку."
                    ,["inventory.has(pipe) and not shadow._can"] = "Банку нужно будет нести двумя руками, а Катя уже таскает с собой эту трубу. Она не унесет столько."
                  }
  ,img          = ico "paintcan-use"
  ,ico          = ico "paintcan"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["yard2_fence"] = "И что сделать? Ударить по ограде тяжелой банкой? Вряд ли это поможет."
                    ,["fence_obj"] = chain_ { drop_("paintcan"), walk_("yardfree1") }
                  }
}

yard4 = scene {
   tile         = { cm_tile "window2", 40, 50 }
  ,bounds       = { 160, 340, 640 }
  ,dsc          = "В подъезде довольно темно, но Катя замечает у стены развороченную батарею."
  ,alwaysdsc    = true
  ,obj          = { "pipe", "heavycan" }
  ,nav          = {
                    down = vw("Выйти", "yard3")
                  }
}

pipe = item {
   nam          = "Обломок трубы"
  ,dsc          = "Рядом с ней лежит обломок {трубы}."
  ,ico          = ico "pipe"
  ,img          = ico "pipe-use"
  ,takcnd       = not_("inventory.has(paintcan)")
  ,tak          = choose_ {
                     ["default"] = "Катя подобрала обломок трубы."
                    ,["inventory.has(paintcan)"] = "Вряд ли Катя сможет одновременно нести эти огромную банку с краской и обломок трубы."
                  }
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["yard2_fence"] = 
                        choose_ {
                           ["default"] = 
                              chain_ {
                                 sound_("fence1")
                                ,[[Катя просунула обломок трубы под решетку и навалилась на нее всем телом. У нее получилось отогнуть решетку,
                                   и она вполне могла бы пролезть в образовавшееся отверстие, однако, стоило ей убрать трубу, как решетка вернулась на
                                   места, а вновь отогнуть ее руками у Кати не получилось. Вот если бы можно было поставить что-нибудь под решетку...]]
                              }
                          ,["inventory.has(paintcan)"] = chain_ { sound_("fence1"), drop_("pipe"), walk_("fence") }
                        }
                        
                    ,["paintcan"] = 
                        choose_ {
                           ["default"] = 
                              chain_ { 
                                set_("shadow._can"), 
                                [[Катя содрала с банки крышку с помощью острого края трубы. Внутри оказалась почти закаменевшая краска. Впрочем, у 
                                  Кати получилось растолочь часть содержимого банки и вытряхнуть это наружу. Банка стала ощутимо легче. Пеперь Катя,
                                  хоть и с трудом, может нести ее одной рукой.]]
                              }
                          ,["shadow._can"] = "Банка и так уже стала легче, теперь ее вполне можно нести одной рукой."
                        }
                  }
}

fence = scene {
   bounds       = { 260, 200, 480 }
  ,obj          = { "fence_obj", "fencetired_obj" }
}

fence_obj = staticitem {
   dsc          = [[Катя просунула обломок трубы в дыру у основания забора и, навалившись на трубу всем телом, смогла отогнуть решетку.
                    Однако она чувствует, что, стоит ей отпустить трубу, как решетка тут же вернется на место. Нужно поставить что-нибудь {под 
                    решетку}, тогда, возможно, получится пролезть.^]]
}

fencetired_obj = staticitem {
   dsc          = "Держать так решетку довольно тяжело, у Кати быстро {устают} руки."
  ,act          = chain_ { sound_("fence2"), take_("pipe"), walk_("yard2") }
}

yardfree1 = cutscene {
   bounds       = { 260, 220, 480 }
  ,dsc          = [[Катя, едва удерживая трубу одной рукой, быстро просунула банку под решетку. Потом пролезла в образовавшийся проем.
                    Она была на соседней улице. Нужно обойти всего лишь пару домов, чтобы вернуться домой.^ Уже совсем рядом от своего дома 
                    она вдруг замерла, подумав, что преследователь может просто поджидать ее у подъезда. Но делать было нечего. До 
                    комендантского часа оставалось всего несколько минут.]]
  ,next         = "yardfree2"
}

yardfree2 = pause {
   time         = 2000
  ,next         = "entrance2"
}

entrance2 = scene {
   tile         = tile "building"
  ,enter        = set_("shadow._home")
  ,bounds       = { 280, nil, 550 }
  ,dsc          = [[На улице уже начало темнеть, а над горизонтом сгустились темные грозовые облака -- наверное, ночью снова пойдет дождь.]]
  ,obj          = { "entrance2_car" }
  ,nav          = {
                     left = vw("Вернуться в дом", "flat_trans1")
                    ,right = vw("На другую сторону улицы"):noway("Комендантский час уже начался. Лучше вернуться поскорее домой.")
                  }
}

entrance2_car = staticitem {
   dsc          = "Машины на другой стороне улицы уже {нет}."
  ,act          = "Быть может, он потерял ее и решил уехать?"
  ,showonce     = true
}

finita = pause {
   time         = 1
  ,next         = "main"
}